home *** CD-ROM | disk | FTP | other *** search
/ Big Science Comics / Big Science Comics (1996)(Theatrix)[Mac-PC].iso / pc / wnet16 / disk1 / setup.ms_ / setup.ms
Text File  |  1996-06-25  |  50KB  |  1,326 lines

  1. '============================================================================
  2. '           
  3. '
  4. ' $Workfile: SETUP.MST $
  5. ' $Revision: 21 $
  6. ' $Date: 2/13/96 12:39p $
  7. '
  8. ' Authors: Modified by Lisa Angelini.  Original from Netscape
  9. '
  10. ' Purpose: This script file is used by MS Setup to create installation
  11. '       procedures.  We have modified this script from Netscape for
  12. '       the installation and setup of our files.
  13. '
  14. ' $History: SETUP.MST $
  15. ' *****************  Version 21  *****************
  16. ' User: Lisa         Date: 2/13/96    Time: 12:39p
  17. ' Updated in $/WorldNet.16/Install
  18. ' 1.  Moved the "Would you like to delete the _ directory" message box
  19. ' after the message box that says "Are you sure you want to deinstall
  20. ' AT&T WorldNet Services".  Now, both message boxes are reworded and
  21. ' follow one after another.  No longer will the user be able to save the
  22. ' directory if they decide to deinstall.  When they answer yes to the
  23. ' Warning message box, everything is removed.
  24. ' *****************  Version 20  *****************
  25. ' User: Lisa         Date: 1/31/96    Time: 11:34a
  26. ' Updated in $/WorldNet.16/Install
  27. ' 1.  Set claimport to 1 in our modification of system.ini for shivappp
  28. ' *****************  Version 19  *****************
  29. ' User: Lisa         Date: 1/30/96    Time: 2:41p
  30. ' Updated in $/WorldNet.16/Install
  31. ' 1.  Changed GroupRst's class name to the new one that Mike changed it
  32. ' to.
  33. ' 2.  Reworded the message box that appears when we detect the user does
  34. ' not have a PE installation.
  35. ' *****************  Version 18  *****************
  36. ' User: Baumeister   Date: 1/26/96    Time: 10:26a
  37. ' Updated in $/WorldNet.16/Install
  38. ' Added custcare.bmp to the deinstall list.
  39. ' *****************  Version 17  *****************
  40. ' User: Lisa         Date: 1/25/96    Time: 6:57p
  41. ' Updated in $/WorldNet.16/Install
  42. ' 1.  changed commented code to have new names of grouprst.exe and
  43. ' advisor.exe
  44. ' 2.  changed the launcher.ini to advisor.ini where the ini file gets
  45. ' updated with the correct directory for our installation.
  46. ' *****************  Version 16  *****************
  47. ' User: Lisa         Date: 1/25/96    Time: 5:35p
  48. ' Updated in $/WorldNet.16/Install
  49. ' 1.  Change last place where qwikfix.exe needed to be changed to
  50. ' grouprst.exe.
  51. ' *****************  Version 15  *****************
  52. ' User: Lisa         Date: 1/23/96    Time: 4:58p
  53. ' Updated in $/WorldNet/Install
  54. ' 1.  Put in check for LAN version, i.e. not a PE version.  The typical
  55. ' option will always give C:\worldnet if we find and entry in win.ini for
  56. ' a previous installation.
  57. ' 2.  added dialer.ico to deletion list.
  58. ' *****************  Version 14  *****************
  59. ' User: Lisa         Date: 1/11/96    Time: 4:21p
  60. ' Updated in $/WorldNet/Install
  61. ' Updated with the latest release from Netscape.  This is a merged
  62. ' version of their changes (mostly Service to Services) and our changes.
  63. ' Also added the new names wnsysrpt, advisor, and grouprst to the list of
  64. ' files to be deinstalled.
  65. ' *****************  Version 13  *****************
  66. ' User: Lisa         Date: 12/15/95   Time: 1:56p
  67. ' Updated in $/WorldNet/Install
  68. ' 1.  Added a version check for Win 95 and a loop to check if QwikFix is
  69. ' finished executing, which indicates that the program group is created.
  70. ' This is needed only for Windows 95 because setup was continuing to
  71. ' proceed even though QwikFix hadn't finished creating the program group.
  72. ' As a result, the Setup message box to continue with installation was
  73. ' hidden from the user by the program group.  This happened only in
  74. ' Windows 95.
  75. ' *****************  Version 12  *****************
  76. ' User: Lisa         Date: 12/14/95   Time: 1:05p
  77. ' Updated in $/WorldNet/Install
  78. ' 1.  changed sections names AT&&T WorldNet Services and AT&&T Dial back
  79. ' to Netscape and AttDial.
  80. ' *****************  Version 11  *****************
  81. ' User: Lisa         Date: 12/13/95   Time: 12:12p
  82. ' Updated in $/WorldNet/Install
  83. ' 1.  Change AT&T WorldNet(SM) Servics back to AT&T WorldNet Service
  84. ' until Netscape can make the appropriate changes in signup.exe.
  85. ' *****************  Version 10  *****************
  86. ' User: Lisa         Date: 12/13/95   Time: 11:54a
  87. ' Updated in $/WorldNet/Install
  88. ' 1.  Changed the DeleteProgmanGroup argument to AT&T WorldNet(SM)
  89. ' Services so the program group gets deleted on deinstall.
  90. ' 2.  Remove all the code in the subroutine AddProgramItems, except for
  91. ' ShowWindow on the program manager and added a call to WinExec
  92. ' QwikFix.exe.  This creates the program group items now.
  93. ' *****************  Version 9  *****************
  94. ' User: Lisa         Date: 12/12/95   Time: 3:40p
  95. ' Updated in $/WorldNet/Install
  96. ' 1.  Changed name of shiva section to ShivaPPP and its entry to
  97. ' ClaimPort.
  98. ' *****************  Version 8  *****************
  99. ' User: Lisa         Date: 12/12/95   Time: 11:15a
  100. ' Updated in $/WorldNet/Install
  101. ' 1.  WinExec qwikfix.exe after program group is created in case the user
  102. ' did a reinstall and there are two registration wizard icons present.
  103. ' 2.  Changed all Service text to Services.
  104. ' 3.  Modified the system.ini entry for shiva to be shivappp not
  105. ' shiva.ppp
  106. ' 4.  Added removal of shivappp entry in system.ini if user selects
  107. ' deinstall.
  108. ' 5.  Using signup.exe not regwiz.ico for the wrapped registration wizard
  109. ' icon.
  110. ' 6.  Added qwiklook.ini and getaccnt.exe to list of files to delete on
  111. ' deinstall.
  112. ' 7.  Changed customer care icon title to Customer Care Tools.
  113. ' 8.  Added full path to command line for notepad for the Read Me icon.
  114. ' 9.  Added full path to command line for customer care icon.
  115. ' 10.  Changed Netscape to AT&&T WorldNet Services in the section where
  116. ' the launcher.ini file gets modified.
  117. ' 11.  Same as 10.  Changed Att Dial to AT&&T Dial.
  118. ' *****************  Version 7  *****************
  119. ' User: Lisa         Date: 11/22/95   Time: 3:14p
  120. ' Updated in $/WorldNet/Install
  121. ' 1.  Changed the launcher.ini file so eudora has the full path for its
  122. ' argument (directory).
  123. ' *****************  Version 6  *****************
  124. ' User: Lisa         Date: 11/21/95   Time: 3:59p
  125. ' Updated in $/WorldNet/Install
  126. ' 1.  Removed an extra " from line 917.
  127. ' *****************  Version 5  *****************
  128. ' User: Lisa         Date: 11/20/95   Time: 2:14p
  129. ' Updated in $/WorldNet/Install
  130. ' 1.  Removed QwikLook.exe and added CustCare.exe to the program group.
  131. ' 2.  Added CustCare.exe to list of files to be removed.
  132. ' 3.  Added launcher section to be updated in the launcher.ini so it has
  133. ' the correct directory where worldnet was installed into.
  134. ' *****************  Version 4  *****************
  135. ' User: Lisa         Date: 11/16/95   Time: 10:00a
  136. ' Updated in $/WorldNet/Install
  137. ' Remove qwiklook.ini from script since it doesn't exist yet.
  138. ' *****************  Version 3  *****************
  139. ' User: Lisa         Date: 11/15/95   Time: 2:50p
  140. ' Updated in $/WorldNet/Install
  141. ' Added line to remove qwikfix.ini.
  142. ' *****************  Version 2  *****************
  143. ' User: Lisa         Date: 11/13/95   Time: 4:52p
  144. ' Updated in $/WorldNet/Install
  145. ' 1.  Changed fixup.exe to qwikfix.exe everywhere.
  146. ' 2.  Changed the Read Me icon to point to our readme file
  147. ' att\wnreadme.txt.
  148. ' 3.  Added line to delete worldnet.ico.
  149. ' *****************  Version 1  *****************
  150. ' User: Lisa         Date: 11/07/95   Time: 5:15p
  151. ' Created in $/WorldNet/Install
  152. '============================================================================
  153.  
  154. '**************************************************************************
  155. '*                              Netscape Setup
  156. '**************************************************************************
  157.  
  158. '$DEFINE DEBUG  ''Define for script development/debugging
  159.  
  160. '$INCLUDE 'setupapi.inc'
  161. '$INCLUDE 'msdetect.inc'
  162. '$INCLUDE 'msregdb.inc'
  163.  
  164. ''Dialog ID's
  165. CONST WELCOME       = 100
  166. CONST ASKQUIT       = 200
  167. CONST PROGROUP      = 260
  168. CONST DESTPATH      = 300
  169. CONST EXITFAILURE   = 400
  170. CONST EXITQUIT      = 600
  171. CONST EXITSUCCESS   = 700
  172. CONST OPTIONS       = 800
  173. CONST APPHELP       = 900
  174. CONST REBOOT        = 1000
  175. CONST RESTART       = 1001
  176. CONST BADPATH       = 6400
  177. CONST EXISTING      = 160
  178. CONST BILLBOARD1    = 320
  179. CONST BILLBOARD2    = 340
  180. CONST BILLBOARD3    = 360
  181. CONST CUSTINST      = 6200
  182. CONST INSTALLTYPE   = 6500
  183. CONST TOOBIG        = 6300
  184.  
  185. ''Bitmap ID
  186. CONST LOGO = 1
  187.  
  188. ''File Types
  189. CONST APPFILES     = 1
  190. CONST STACKFILES   = 2
  191. CONST EUDORAFILES  = 3
  192.  
  193. GLOBAL DEST$        ''Default destination directory.
  194. GLOBAL SRC$         ''Default source directory
  195. GLOBAL WINDRIVE$    ''Windows drive letter.
  196.  
  197. ''CustInst list symbol names
  198. GLOBAL APPNEEDS$    ''Option list costs per drive
  199. GLOBAL STACKNEEDS$
  200. GLOBAL EUDORANEEDS$
  201. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  202. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  203.  
  204. ''Dialog list symbol names
  205. GLOBAL CHECKSTATES$
  206. GLOBAL STATUSTEXT$
  207. GLOBAL DRIVETEXT$
  208.  
  209. ' Constants used internaly to indicate which install
  210. ' configuration we are dealing with
  211. CONST NO_NET    = 0      ''No NDIS network currently installed
  212. CONST SOME_NET  = 1      ''Non-WFW NDIS network installed
  213. CONST WFW_NET   = 2      ''WFW network installed (not necessarily MultiNet, but uses "net start")
  214.  
  215. GLOBAL wNetType%         ''One of the constants above
  216. GLOBAL bReinstall%       ''User is reinstalling
  217. GLOBAL bRebootMachine%   ''Reboot machine or just restart Windows
  218. GLOBAL bISPMode%         ''Are we doing an ISP configuration?
  219. GLOBAL bRegOnlyMode%     ''Are we reg server only install?
  220. GLOBAL szISPName$        ''The name of the ISP if in ISP mode
  221.  
  222. ' Miscellaneous Windows constants not defined in existing .INC files
  223. CONST SW_MINIMIZE = 6
  224. CONST SW_RESTORE  = 9
  225.  
  226. CONST SW_SHOWNOACTIVATE = 4
  227. CONST SW_SHOW     = 5
  228.  
  229. CONST IDYES = 6
  230. CONST IDNO  = 7
  231.  
  232. CONST WNNC_NET_MultiNet         = &H8000
  233. CONST WNNC_SUBNET_WinWorkgroups = 4
  234. CONST WNNC_NET_TYPE             = 2
  235. CONST WNNC_NET_NONE             = 0
  236.  
  237. DECLARE FUNCTION FindWindow LIB "user" (szClassName$, szWindow$) AS INTEGER
  238. DECLARE FUNCTION ExitWindows LIB "user" (dwReturnCode&, nReserved%) AS INTEGER
  239. DECLARE SUB      ShowWindow LIB "user" (hwnd%, nCmdShow%)
  240. DECLARE FUNCTION WNetGetCaps LIB "user" (nIndex%) AS INTEGER
  241. DECLARE SUB      WinExec LIB "kernel" (szCmdLine$, nCmdShow%)
  242. DECLARE SUB      PostMessage LIB "user" (hwnd%, msg%, wParam%, lParam&)
  243. DECLARE FUNCTION RegisterWindowMessage LIB "user" (szMessage$) AS INTEGER
  244.  
  245. DECLARE FUNCTION IsWindows30 LIB "mscuistf.dll" () AS INTEGER
  246. DECLARE FUNCTION IsISPMode LIB "mscuistf.dll" (szPath$) AS INTEGER
  247. DECLARE FUNCTION IsRegOnlyMode LIB "mscuistf.dll" (szPath$) AS INTEGER
  248. DECLARE SUB      HandleMultipleConfigurations LIB "mscuistf.dll" ()
  249. DECLARE FUNCTION CommaListContains LIB "mscuistf.dll" (szStr1$, szStr2$) AS INTEGER
  250. DECLARE SUB      GetProtmanPath LIB "mscuistf.dll" (szBuf$)
  251. DECLARE FUNCTION InstallOemsetup LIB "mscuistf.dll" (szPath$) AS INTEGER
  252. DECLARE FUNCTION IsNTSWinsock LIB "mscuistf.dll" (szPath$) AS INTEGER
  253. DECLARE FUNCTION IsBadWin32s LIB "mscuistf.dll" () AS INTEGER
  254. DECLARE SUB      RemoveDirRecurse LIB "mscuistf.dll" (szPath$)
  255. DECLARE SUB      DeleteProgmanGroup LIB "mscuistf.dll" (szGroup$)
  256.  
  257. ' Helper routine to update NETSCAPE.INI if Netscape is installed in a
  258. ' directory other than C:\NETSCAPE
  259. DECLARE SUB      UpdateNetscapeIni LIB "mscuistf.dll" (szIniPath$)
  260.  
  261. ' Routines to modify a section of an .INI file
  262. DECLARE SUB      AddProfileString LIB "mscuistf.dll" (szFileName$, szSection$, szKey$, szValue$, szRef$)
  263. DECLARE SUB      RemoveProfileString LIB "mscuistf.dll" (szFileName$, szSection$, szKey$, szRef$)
  264.  
  265. ' Routines to modify batch files
  266. DECLARE FUNCTION BatchFileLoad LIB "mscuistf.dll" (szPath$) AS INTEGER
  267. DECLARE FUNCTION BatchFileSave LIB "mscuistf.dll" () AS INTEGER
  268. DECLARE SUB      BatchFileQuit LIB "mscuistf.dll" ()
  269. DECLARE FUNCTION BatchAddVariable LIB "mscuistf.dll" (szVar$, szValue$, szRefKey$, bInsertBefore%) AS INTEGER
  270. DECLARE FUNCTION BatchFindVariable LIB "mscuistf.dll" (szVar$, szBuf$, nBufLen%, bRestart%) AS INTEGER
  271. DECLARE FUNCTION BatchReplaceVariable LIB "mscuistf.dll" (szValue$) AS INTEGER
  272. DECLARE FUNCTION BatchRemoveVariable LIB "mscuistf.dll" AS INTEGER
  273. DECLARE FUNCTION BatchAddCmd LIB "mscuistf.dll" (szCmd$, szRefKey$, bInsertBefore%) AS INTEGER
  274. DECLARE FUNCTION BatchFindCmdReference LIB "mscuistf.dll" (szRefKey$, szBuf$, nBufLen%, bRestart%) AS INTEGER
  275. DECLARE FUNCTION BatchReplaceCmd LIB "mscuistf.dll" (szCmd$) AS INTEGER
  276. DECLARE FUNCTION BatchRemoveCmd LIB "mscuistf.dll" AS INTEGER
  277.  
  278. ' Local routines
  279. DECLARE SUB      Install
  280. DECLARE SUB      Deinstall
  281. DECLARE SUB      Deinstall12
  282. DECLARE SUB      CreateNewsDir (szNetscapeIni$, szNewsDir$)
  283. DECLARE SUB      CheckForOldVersion
  284. DECLARE SUB      AddProgramItems
  285. DECLARE SUB      UpdateSystemIni
  286. DECLARE SUB      UpdateAutoexec
  287. DECLARE SUB      UpdateConfigSys
  288. DECLARE SUB      UpdateProtocolIni
  289. DECLARE SUB      UpdateRegistry
  290. DECLARE SUB      AppendToKeynameValue (szExisting$, szAdd$)
  291. DECLARE FUNCTION BuildOemFileName (x%) AS STRING
  292. DECLARE SUB      AddOptFilesToCopyList (ftype%)
  293. DECLARE SUB      RecalcOptFiles (ftype%)
  294. DECLARE SUB      RecalcPath
  295. DECLARE SUB      SetDriveStatus
  296. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  297. DECLARE FUNCTION OfferToDeinstall () AS INTEGER
  298.  
  299. INIT:
  300.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  301.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  302.  
  303.     bReinstall% = 0
  304.     bRebootMachine% = 0
  305.  
  306.     SRC$ = GetSymbolValue("STF_SRCDIR")
  307.         
  308.     bISPMode = IsISPMode(SRC$)
  309.     bRegOnlyMode = IsRegOnlyMode(SRC$)
  310.     
  311.     IF bISPMode THEN
  312.         szInstallINI$ = SRC$ + "install.ini"
  313.         szISPName$ = GetIniKeyString(szInstallINI$, "Install Options", "ISPName")
  314.     END IF
  315.  
  316.     SetBitmap CUIDLL$, LOGO
  317.     szTitle$ = "AT&T WorldNet Services"
  318.     
  319.     IF bISPMode THEN
  320.         szTitle$ = szTitle$ + " for " + szISPName$
  321.     END IF
  322.  
  323.     SetTitle szTitle$
  324.  
  325.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  326.     IF szInf$ = "" THEN
  327.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  328.     END IF
  329.     ReadInfFile szInf$
  330.  
  331.     ' Check to make sure we are not running Windows 3.0
  332.     IF IsWindows30 THEN
  333.         i% = DoMsgBox("You must be running Windows 3.1 or Windows for Workgroups in order to install AT&T WorldNet Services.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  334.         END
  335.     END IF
  336.  
  337.     ' See if the user is running a version of Win32s less than 1.2
  338.     IF IsBadWin32s() THEN
  339.         szErrText$ = "Version 1.2 of the AT&T WorldNet Services uses OLE 2.02, which is not compatible with this version of Win32s."
  340.         szErrText$ = szErrText + " You must upgrade to Win32s version 1.2 before installing the AT&T WorldNet Services."
  341.         szErrText$ = szErrText + Chr$(10) + "For more information, please read the AT&T WorldNet Services Troubleshooting Guide."
  342.         i% = DoMsgBox(szErrText$, "AT&T WorldNet Services", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  343.         END
  344.     END IF
  345.  
  346.     ' Launch our companion app to watch for us to terminate
  347.     WinExec MakePath(GetSymbolValue("STF_SRCDIR"), "watcher.exe"), SW_SHOWNOACTIVE
  348.  
  349.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  350.  
  351.     ' If there is an existing Netscape installation then use the current
  352.     ' directory as the default location; otherwise use \NETSCAPE
  353.     DEST$ = GetIniKeyString("WIN.INI", "Netscape", "ini")
  354.  
  355.     IF OfferToDeinstall  THEN
  356.         IF DEST$ = "" THEN
  357.             DEST$ = MID$(GetWindowsDir, 1, 1) + ":\WORLDNET"
  358.            ELSE
  359.             SPLITPATH DEST$, drv$, dir$, filename$, ext$
  360.             DEST$ = drv$ + MID$(dir$, 1, LEN(dir$) - 1)
  361.             END IF
  362. ELSE
  363.         IF DEST$ <> "" THEN
  364.             SPLITPATH DEST$, drv$, dir$, filename$, ext$
  365.             DEST$ = drv$ + MID$(dir$, 1, LEN(dir$) - 1)
  366.             szText$ = "AT&T WorldNet Services has detected a version of Netscape installed in the " 
  367.             szText$= szText$+DEST$+" directory.  This may be a LAN version, or a "
  368.             szText$= szText$+"Netscape browser that you use with your own stack and dialer."
  369.             szText$= szText$+"   AT&T WorldNet Services will be installed in the "
  370.             szText$=szText$+MID$(GetWindowsDir, 1, 1)+":\WORLDNET directory, "
  371.             szText$= szText$+"unless you specify a different directory using the Custom option later during this setup process.  " 
  372.             szText$=szText$+"After Setup and Registration are complete, it is strongly recommended that "
  373.             szText$=szText$+" you read the section of the Troubleshooting Guide titled 'If You Already Have Netscape Installed'." 
  374.             i% = DoMsgBox(szText$, "AT&T WorldNet Services", MB_OK+TASKMODAL+MB_ICONINFORMATION)
  375.         END IF
  376.         DEST$ = MID$(GetWindowsDir, 1, 1) + ":\WORLDNET"
  377.     END IF
  378.  
  379.     ' Check for an old version
  380.     CheckForOldVersion
  381.  
  382. WELCOME:
  383.     ' If there is an existing 1.2 configuration, then offer to let the user
  384.     ' deinstall the product
  385.     IF OfferToDeinstall THEN
  386.         sz$ = UIStartDlg(CUIDLL$, EXISTING, "FExistingDlgProc", APPHELP, HELPPROC$)
  387.         IF sz$ = "DEINSTALL" THEN
  388.             ' Get user to confirm
  389.             IF DoMsgBox("Are you sure you want to deinstall the software in the "+DEST$+" directory?", "AT&T WorldNet Services", MB_YESNO) = IDNO THEN
  390.             GOTO WELCOME
  391.             END IF
  392.  
  393.             ' Ask the user if they are sure they want to blow away the whole directory
  394.             szText$="Warning! Deinstalling this software will remove ALL files in the "+DEST$+" directory"
  395.             szText$ =szText$+", including ALL non-Netscape files that are in this directory.  Are you sure you want to deinstall?" 
  396.                 IF DoMsgBox(szText$, "AT&T WorldNet Services", MB_YESNO+MB_ICONHAND) = IDNO THEN
  397.             GOTO WELCOME
  398.             ENDIF
  399.     
  400.             UIPop 1
  401.             Deinstall
  402.             END
  403.         ELSEIF sz$ <> "CONTINUE" THEN
  404.             GOSUB ASKQUIT
  405.             GOTO WELCOME
  406.         ELSE
  407.             bReinstall% = 1
  408.             ' Change the network type to NO_NET. This way if either the user wants to
  409.             ' reinstall in a different directory or the existing installation is incomplete
  410.             ' (e.g. no NDIS directory) we do the correct thing
  411.             wNetType% = NO_NET
  412.         END IF
  413.     ELSE
  414.         sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  415.         IF sz$ <> "CONTINUE" THEN
  416.             GOSUB ASKQUIT
  417.             GOTO WELCOME
  418.         END IF
  419.     END IF
  420.     UIPop 1
  421.  
  422.     CHECKSTATES$ = "CheckItemsState"
  423.     FOR i% = 1 TO 3 STEP 1
  424.         AddListItem CHECKSTATES$, "ON"
  425.     NEXT i%
  426.  
  427. ASKINSTALL:
  428.     SetSymbolValue "RadioDefault", "1"
  429.     SetSymbolValue "InstallDir", DEST$
  430.  
  431. ASK1:
  432.     ''Find out whether the user wants a simple or custom install
  433.     sz$ = UIStartDlg(CUIDLL$, INSTALLTYPE, "FRadioDlgProc", APPHELP, HELPPROC$)
  434.     IF sz$ = "CONTINUE" THEN
  435.         UIPOP 1
  436.         IF GetSymbolValue("ButtonChecked") = "1" THEN
  437.             GOTO CHOOSEGROUP
  438.         END IF
  439.     ELSEIF sz$ = "REACTIVATE" THEN
  440.         GOTO ASK1
  441.     ELSE
  442.         GOSUB ASKQUIT
  443.         GOTO ASKINSTALL
  444.     END IF
  445.  
  446. SETUPCUSTINST:
  447.     ''CustInst list symbols
  448.     STATUSTEXT$  = "StatusItemsText"
  449.     DRIVETEXT$   = "DriveStatusText"
  450.     FOR i% = 1 TO 3 STEP 1
  451.         AddListItem STATUSTEXT$, ""
  452.     NEXT i%
  453.     FOR i% = 1 TO 3 STEP 1
  454.         AddListItem DRIVETEXT$, ""
  455.     NEXT i%
  456.     ReplaceListItem DRIVETEXT$, 3, DEST$
  457.  
  458.     ''Disk cost list symbols
  459.     APPNEEDS$    = "AppNeeds"
  460.     STACKNEEDS$  = "StackNeeds"
  461.     EUDORANEEDS$ = "EudoraNeeds"
  462.     EXTRACOSTS$  = "ExtraCosts"
  463.     BIGLIST$     = "BigList"
  464.     FOR i% = 1 TO 3 STEP 1
  465.         AddListItem BIGLIST$, ""
  466.     NEXT i%
  467.     FOR i% = 1 TO 26 STEP 1
  468.         AddListItem EXTRACOSTS$, "0"
  469.     NEXT i%
  470.  
  471.     RecalcPath
  472.     SetDriveStatus
  473.  
  474. CUSTINST:
  475.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  476.  
  477.     ' Note that there is no CHK1 returned as a notification. That is because
  478.     ' we treat the APPFILES as CHK1
  479.     IF sz$ = "CONTINUE" THEN
  480.         ''Install only if it will fit.
  481.         FOR i% = 1 TO 3 STEP 1
  482.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  483.             GOSUB TOOBIG
  484.             GOTO CUSTINST
  485.             END IF
  486.         NEXT i%
  487.         UIPop 1
  488.         GOTO CHOOSEGROUP
  489.     ELSEIF sz$ = "NEWPATH" THEN
  490.         DEST$ = GetListItem(DRIVETEXT$, 3)
  491.  
  492.         ''Truncate display if too long.
  493.         IF LEN(DEST$) > 23 THEN
  494.             ReplaceListItem DRIVETEXT$, 3, MID$(DEST$, 1, 23)+"..."
  495.         END IF
  496.  
  497.         RecalcPath
  498.         SetDriveStatus
  499.         GOTO CUSTINST
  500.     ELSEIF sz$ = "CHK2" THEN
  501.         CursorSave% = ShowWaitCursor()
  502.         RecalcOptFiles STACKFILES
  503.         SetDriveStatus
  504.         RestoreCursor CursorSave%
  505.         GOTO CUSTINST
  506.     ELSEIF sz$ = "CHK3" THEN
  507.         CursorSave% = ShowWaitCursor()
  508.         RecalcOptFiles EUDORAFILES
  509.         SetDriveStatus
  510.         RestoreCursor CursorSave%
  511.         GOTO CUSTINST
  512.     ELSEIF sz$ = "REACTIVATE" THEN
  513.         RecalcPath
  514.         SetDriveStatus
  515.         GOTO CUSTINST
  516.     ELSE
  517.         UIPop 1
  518.         GOTO ASKINSTALL
  519.     END IF
  520.  
  521. CHOOSEGROUP:
  522.     SetSymbolValue "ProgramGroup", "AT&T WorldNet Services"
  523.     Install
  524.  
  525. QUIT:
  526.     ON ERROR GOTO ERRQUIT
  527.  
  528.     IF ERR = 0 THEN
  529.         ' We need to check whether we need to reboot the machine or just
  530.         ' restart Windows
  531.         IF bRebootMachine% THEN
  532.             sz$ = UIStartDlg(CUIDLL$, REBOOT, "FRebootDlgProc", APPHELP, HELPPROC$)
  533.             IF sz$ = "REBOOT" THEN
  534.                 ' Signify that we want to reboot the machine
  535.                 PostMessage FindWindow("NWatcher:WndClass", NULL), RegisterWindowMessage("NWatcher"), 0, 0
  536.             END IF
  537.             UIPop 1
  538.         ELSE
  539.             sz$ = UIStartDlg(CUIDLL$, RESTART, "FRebootDlgProc", APPHELP, HELPPROC$)
  540.             IF sz$ = "REBOOT" THEN
  541.                 ' Signify that we want to restart Windows
  542.                 PostMessage FindWindow("NWatcher:WndClass", NULL), RegisterWindowMessage("NWatcher"), 1, 0
  543.             END IF
  544.             UIPop 1
  545.         END IF
  546.         END
  547.     ELSEIF ERR = STFQUIT THEN
  548.         dlg% = EXITQUIT
  549.     ELSE
  550.         dlg% = EXITFAILURE
  551.     END IF
  552. QUITL1:
  553.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  554.     IF sz$ = "REACTIVATE" THEN
  555.         GOTO QUITL1
  556.     END IF
  557.     UIPop 1
  558.     END
  559.  
  560. ERRQUIT:
  561.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  562.     END
  563.  
  564. TOOBIG:
  565.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  566.     IF sz$ = "REACTIVATE" THEN
  567.         RecalcPath
  568.         SetDriveStatus
  569.         GOTO TOOBIG
  570.     END IF
  571.     UIPop 1
  572.     RETURN
  573.  
  574. BADPATH:
  575.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  576.     IF sz$ = "REACTIVATE" THEN
  577.         GOTO BADPATH
  578.     END IF
  579.     UIPop 1
  580.     RETURN
  581.  
  582. ASKQUIT:
  583.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  584.  
  585.     IF sz$ = "EXIT" THEN
  586.         UIPopAll
  587.         ERROR STFQUIT
  588.     ELSEIF sz$ = "REACTIVATE" THEN
  589.         GOTO ASKQUIT
  590.     ELSE
  591.         UIPop 1
  592.     END IF
  593.     RETURN
  594.  
  595. '**
  596. '** Purpose:
  597. '**     Returns 1 if it is possible to deinstall an existing implementation
  598. '** Arguments:
  599. '**     none.
  600. '** Returns:
  601. '**     0 or 1.
  602. '*************************************************************************
  603. FUNCTION OfferToDeinstall STATIC AS INTEGER
  604.     cb% = 256
  605.     szBuf$ = STRING$(cb%, 32)
  606.  
  607.     OfferToDeinstall = 0
  608.  
  609.     ' Check for VTCPRAC.386 in the SYSTEM.INI file
  610.     IF BatchFileLoad(MakePath(GetWindowsDir, "SYSTEM.INI")) THEN
  611.         IF BatchFindCmdReference("VTCPRAC.386", szBuf$, cb%, 1) THEN
  612.             OfferToDeinstall = 1
  613.         END IF
  614.         BatchFileQuit
  615.     END IF
  616. END FUNCTION
  617.  
  618. '**
  619. '** Purpose:
  620. '**     Creates Netscape program group and associated program items
  621. '** Arguments:
  622. '**     none.
  623. '** Returns:
  624. '**     none.
  625. '*************************************************************************
  626. SUB AddProgramItems STATIC
  627.     'Show the Program Manager
  628.     ShowWindow FindWindow("PROGMAN", NULL), SW_RESTORE
  629.  
  630.     '' Update program group and program items
  631.     'Group$ = GetSymbolValue("ProgramGroup")
  632.     'CreateProgmanGroup Group$, "", cmoNone
  633.     'ShowProgmanGroup  Group$, 1, cmoNone
  634.     'SLEEP 1
  635.  
  636.     '' Program item for README file
  637.     'CreateProgmanItem Group$, "Trouble Shooting Guide", MakePath(GetWindowsDir, "NOTEPAD.EXE") +" "+ MakePath(DEST$, "ATT\WNREADME.TXT"), "", cmoOverwrite
  638.     'CreateProgmanItem Group$, "Customer Care Tools", MakePath(DEST$, "ATT\CUSTCARE.EXE"), "", cmoOverwrite
  639.  
  640.     'IF GetListItem(CHECKSTATES$, STACKFILES) = "ON" THEN
  641.         '' Program item for signup.exe
  642.         'IF bISPMode THEN
  643.             'szLabel$ = "Setup " + szISPName + " Account"
  644.             ''CreateProgmanItem Group$, szLabel$, MakePath(DEST$, "DIALER\SIGNUP.EXE ISP.SR"), "", cmoOverwrite
  645.             'CreateProgmanItem Group$, szLabel$, MakePath(DEST$, "ATT\GROUPRST.EXE ADVISOR.EXE SIGNUP2"), MakePath(DEST$, "DIALER\SIGNUP.EXE"), cmoOverwrite
  646.         'ELSEIF bRegOnlyMode THEN
  647.             ''CreateProgmanItem Group$, "Registration Wizard", MakePath(DEST$, "DIALER\SIGNUP.EXE -r"), "", cmoOverwrite
  648.             'CreateProgmanItem Group$, "Registration Wizard", MakePath(DEST$, "ATT\ GROUPRST.EXE ADVISOR.EXE SIGNUP3"), MakePath(DEST$, "DIALER\SIGNUP.EXE"), cmoOverwrite
  649.         'ELSE
  650.             ''CreateProgmanItem Group$, "Registration Wizard", MakePath(DEST$, "DIALER\SIGNUP.EXE"), "", cmoOverwrite
  651.              'CreateProgmanItem Group$, "Registration Wizard", MakePath(DEST$, "ATT\ GROUPRST.EXE ADVISOR.EXE SIGNUP"), MakePath(DEST$, "DIALER\SIGNUP.EXE"), cmoOverwrite
  652.             'END IF
  653.     'ELSE
  654.         '' Program item for netscape.exe
  655.         'CreateProgmanItem Group$, "Netscape", MakePath(DEST$, "NETSCAPE.EXE"), "", cmoOverwrite
  656.  
  657.         'IF GetListItem(CHECKSTATES$, EUDORAFILES) = "ON" THEN
  658.             'CreateProgmanItem Group$, "Eudora Light email", MakePath(DEST$, "EUDORA.EXE"), "", cmoOverwrite
  659.         'END IF
  660.     'END IF
  661.  
  662.     ' QwikFix is now responsible for creating the program group
  663.     ' instead of the commented code above
  664.  
  665.     WinExec MakePath(DEST$, "ATT\GROUPRST.EXE"), SW_SHOWNOACTIVE
  666.     SLEEP 2 
  667.  
  668.     ' 24323 is the decimal representation of hex 5F03 which represents
  669.     ' version 3.95 (i.e., Windows 95)
  670.  
  671.     IF GetVersion() >= 24323 THEN
  672.  
  673. QWIKFIXDONEYET:
  674.     ' Loop until the QwikFix window class is removed, indicating
  675.     ' that QwikFix is exiting and has created the program group.
  676.     ' This delays setup from proceeding so the program group does
  677.     ' not cover up the upcoming message box from setup, allowing 
  678.     ' the user to finish setup properly.  This only occurs in Win 95.
  679.  
  680.         IF FindWindow("GroupRstMainWndClassMRA", NULL) THEN
  681.         SLEEP 1
  682.         GOTO QWIKFIXDONEYET
  683.         END IF
  684.  
  685.     END IF
  686.  
  687. END SUB
  688.  
  689. '**
  690. '** Purpose:
  691. '**     Adds a registry association for the dialer application
  692. '** Arguments:
  693. '**     none.
  694. '** Returns:
  695. '**     none.
  696. '*************************************************************************
  697. SUB UpdateRegistry STATIC
  698.     ' Create a root entry called .SR associated with "NetscapePersonalEdition"
  699.     CreateRegKeyValue ".sr", "NetscapePersonalEdition"
  700.  
  701.     ' Create a Root entry called "NetscapePersonalEdition"
  702.     CreateRegKeyValue "NetscapePersonalEdition", "Netscape Connection File"
  703.  
  704.     ' Set the command line for "NetscapePersonalEdition"
  705.     CreateRegKeyValue "NetscapePersonalEdition\shell\open\command", MakePath(DEST$, "DIALER\DIALER.EXE")+" %1"
  706. END SUB
  707.  
  708. '**
  709. '** Purpose:
  710. '**     Adds a new value to the keyname value if it isn't already present
  711. '** Arguments:
  712. '**     none.
  713. '** Returns:
  714. '**     none.
  715. '*************************************************************************
  716. SUB AppendToKeynameValue (szExisting$, szAdd$) STATIC
  717.     IF szExisting$ = "" THEN
  718.         szExisting$ = szAdd$
  719.     ELSEIF CommaListContains(szExisting$, szAdd$) = 0 THEN
  720.         szExisting$ = szExisting$+","+szAdd$
  721.     END IF
  722. END SUB
  723.  
  724. '**
  725. '** Purpose:
  726. '**     Makes the necessary changes to the Windows SYSTEM.INI file
  727. '** Arguments:
  728. '**     none.
  729. '** Returns:
  730. '**     none.
  731. '*************************************************************************
  732. SUB UpdateSystemIni STATIC
  733.     szSysIni$ = MakePath(GetWindowsDir, "SYSTEM.INI")
  734.  
  735.     IF IsFileWritable(szSysIni$) = 0 THEN
  736.         i% = DoMsgBox("Setup is unable to modify "+szSysIni$+". File is read only.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  737.         END
  738.     END IF
  739.  
  740.     ' Shiva specific changes
  741.     AddProfileString szSysIni$, "386Enh", "device", MakePath(DEST$, "system\dial.386"), "dial.386"
  742.     AddProfileString szSysIni$, "386Enh", "device", MakePath(DEST$, "system\pdwcomm.386"), "pdwcomm.386"
  743.     CreateIniKeyValue szSysIni$, "Network", "SessTimeout", "240", cmoOverwrite
  744.     CreateIniKeyValue szSysIni$, "ShivaPPP", "ClaimPort", "1", cmoNone
  745.  
  746.     ' NTS specific changes
  747.     CreateIniKeyValue szSysIni$, "VNTSTIMD", "NumTCBs", "255", cmoOverwrite
  748.     AddProfileString szSysIni$, "386Enh", "device", MakePath(DEST$, "system\vtcprac.386"), "vtcprac.386"
  749.     AddProfileString szSysIni$, "386Enh", "device", MakePath(DEST$, "system\vntstimd.exe"), "vntstimd.exe"
  750. END SUB
  751.  
  752. '**
  753. '** Purpose:
  754. '**     Checks for an old version of Personal Edition
  755. '** Arguments:
  756. '**     none.
  757. '** Side Effects:
  758. '**     sets wNetType%
  759. '** Returns:
  760. '**     none.
  761. '*************************************************************************
  762. SUB CheckForOldVersion STATIC
  763.     cb% = 256
  764.     szBuf$ = STRING$(cb%, 32)
  765.  
  766.     ' We cannot tell conclusively by using WNetGetCaps what the
  767.     ' configuration is, so we must look for some other things instead
  768.     ret% = BatchFileLoad("C:\AUTOEXEC.BAT")
  769.     bNetStart% = BatchFindCmdReference("NET START", szBuf$, cb%, 1)
  770.     bNetbind% = BatchFindCmdReference("NETBIND", szBuf$, cb%, 1)
  771.     BatchFileQuit
  772.  
  773.     IF bNetStart% THEN
  774.         wNetType% = WFW_NET
  775.     ELSEIF bNetbind% THEN
  776.         wNetType% = SOME_NET
  777.     ELSE
  778.         wNetType% = NO_NET
  779.     END IF
  780.  
  781.     ' See if an old version of 1.2 PE is installed on the machine
  782.     ' Check for DIALNDIS.EXE in the CONFIG.SYS file
  783.     IF BatchFileLoad("c:\config.sys") THEN
  784.         IF BatchFindCmdReference("DIALNDIS.EXE", szBuf$, cb%, 1) THEN
  785.             ' Prompt the user before doing this
  786.             IF DoMsgBox("You must deinstall Netscape Personal Edition version 1.2 before installing this version. Do you want to deinstall now?", "AT&T WorldNet Services", MB_YESNO) = IDNO THEN
  787.                 BatchFileQuit
  788.                 END
  789.             ELSE
  790.                 BatchFileQuit
  791.                 Deinstall12
  792.             END IF
  793.         ELSE
  794.             BatchFileQuit
  795.         END IF
  796.  
  797.     ELSE
  798.         ' Check for DIALNDIS.EXE in SYSTEM.INI
  799.         IF BatchFileLoad(MakePath(GetWindowsDir, "SYSTEM.INI")) THEN
  800.             IF BatchFindCmdReference("DIALNDIS.EXE", szBuf$, cb%, 1) THEN
  801.                 i% = DoMsgBox("You must deinstall version 1.2 of Netscape Navigator Personal Edition before installing this software.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  802.                 BatchFileQuit
  803.                 END
  804.             END IF
  805.             BatchFileQuit
  806.         END IF
  807.     END IF
  808. END SUB
  809.  
  810. '**
  811. '** Purpose:
  812. '**     Creates specified news directory
  813. '** Arguments:
  814. '**     Path to Netscape INI file and directory to create.
  815. '** Returns:
  816. '**     none.
  817. '*************************************************************************
  818. SUB CreateNewsDir (szNetscapeIni$, szNewsDir$) STATIC
  819.     ' Check for a file with the same name as the directory we are trying to create
  820.     IF DoesFileExist(szNewsDir$, femExists) THEN
  821.         ' Try using MOZNEWS as the directory name
  822.         IF DoesFileExist(MakePath(DEST$, "MOZNEWS"), fmExists) = 0 THEN
  823.             CreateDir MakePath(DEST$, "MOZNEWS"), cmoNone
  824.  
  825.             ' Add a line to the Netscape INI file pointing to the news directory
  826.             CreateIniKeyValue szNetscapeIni$, "News", "News Directory", MakePath(DEST$, "MOZNEWS"), cmoOverwrite
  827.         END IF
  828.     ELSE
  829.         CreateDir szNewsDir$, cmoNone
  830.  
  831.         ' Add a line to the Netscape INI file pointing to the news directory
  832.         CreateIniKeyValue szNetscapeIni$, "News", "News Directory", szNewsDir$, cmoOverwrite
  833.     END IF
  834. END SUB
  835.  
  836. '**
  837. '** Purpose:
  838. '**     Deinstalls the product
  839. '** Arguments:
  840. '**     none.
  841. '** Returns:
  842. '**     none.
  843. '*************************************************************************
  844. SUB Deinstall STATIC
  845.     cb% = 256
  846.     szBuf$ = STRING$(cb%, 32)
  847.  
  848.     ' Clean up WIN.INI entries except for the Navigator itself
  849.     RemoveIniKey "WIN.INI", "Netscape", "dialer", cmoNone
  850.     RemoveIniKey "WIN.INI", "Netscape", "eudora", cmoNone
  851.  
  852.     ' Next remove device drivers from SYSTEM.INI
  853.     szSysIni$ = MakePath(GetWindowsDir, "SYSTEM.INI")
  854.     IF IsFileWritable(szSysIni$) = 0 THEN
  855.         i% = DoMsgBox("Setup is unable to modify "+szSysIni$+". File is read only.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  856.         END
  857.     END IF
  858.  
  859.     RemoveProfileString szSysIni$, "386Enh", "device", "dial.386"
  860.     RemoveProfileString szSysIni$, "386Enh", "device", "pdwcomm.386"
  861.     RemoveProfileString szSysIni$, "386Enh", "device", "vtcprac.386"
  862.     RemoveProfileString szSysIni$, "386Enh", "device", "vntstimd.exe"
  863.     RemoveIniSection szSysIni$, "VNTSTIMD", cmoNone
  864.     RemoveIniSection szSysIni$, "ShivaPPP", cmoNone
  865.  
  866.     IF DoesFileExist(MakePath(GetWindowsDir, "NTS.INI"), femExists) THEN
  867.         RemoveFile MakePath(GetWindowsDir, "NTS.INI"), cmoNone
  868.     END IF
  869.  
  870.     ' Remove the WINSOCK.DLL from the Netscape directory
  871.     IF DoesFileExist(MakePath(DEST$, "WINSOCK.DLL"), femExists) THEN
  872.         RemoveFile MakePath(DEST$, "WINSOCK.DLL"), cmoNone
  873.     END IF
  874.  
  875.     ' Remove the program manager group
  876.     DeleteProgmanGroup "AT&T WorldNet Services"
  877.  
  878.     ' Ask the user if they want to blow away the whole NETSCAPE directory
  879.  '   IF DoMsgBox("Would you like Setup to delete the "+DEST$+" directory?", "AT&T WorldNet 'Services", MB_YESNO) = IDYES THEN
  880.         RemoveIniSection "WIN.INI", "Netscape", cmoNone
  881.         IF DoesDirExist( MakePath(DEST$, "att") ) THEN
  882.             RemoveFile MakePath(DEST$, "att\comport.dll"), cmoForce
  883.             RemoveFile MakePath(DEST$, "att\ctl3d.dll"), cmoForce
  884.             RemoveFile MakePath(DEST$, "att\advisor.exe"), cmoForce
  885.             RemoveFile MakePath(DEST$, "att\wnsysrpt.exe"), cmoForce
  886.             RemoveFile MakePath(DEST$, "att\grouprst.exe"), cmoForce
  887.             RemoveFile MakePath(DEST$, "att\getaccnt.exe"), cmoForce
  888.             RemoveFile MakePath(DEST$, "att\qwikfix.exe"), cmoForce
  889.             RemoveFile MakePath(DEST$, "att\launch16.exe"), cmoForce
  890.             RemoveFile MakePath(DEST$, "att\qwiklook.exe"), cmoForce
  891.             RemoveFile MakePath(DEST$, "att\custcare.exe"), cmoForce
  892.             RemoveFile MakePath(DEST$, "att\custcare.bmp"), cmoForce
  893.             RemoveFile MakePath(DEST$, "att\advisor.hlp"), cmoForce
  894.             RemoveFile MakePath(DEST$, "att\wnsysrpt.hlp"), cmoForce
  895.             RemoveFile MakePath(DEST$, "att\launch16.hlp"), cmoForce
  896.             RemoveFile MakePath(DEST$, "att\qwiklook.hlp"), cmoForce
  897.             RemoveFile MakePath(DEST$, "att\worldnet.ico"), cmoForce
  898.             RemoveFile MakePath(DEST$, "att\regwiz.ico"), cmoForce
  899.             RemoveFile MakePath(DEST$, "att\dialer.ico"), cmoForce
  900.             RemoveFile MakePath(DEST$, "att\modems.inf"), cmoForce
  901.             RemoveFile MakePath(DEST$, "att\advisor.ini"), cmoForce
  902.             RemoveFile MakePath(DEST$, "att\wnsysrpt.ini"), cmoForce
  903.             RemoveFile MakePath(DEST$, "att\grouprst.ini"), cmoForce
  904.             RemoveFile MakePath(DEST$, "att\launcher.ini"), cmoForce
  905.             RemoveFile MakePath(DEST$, "att\modems.ini"), cmoForce
  906.             RemoveFile MakePath(DEST$, "att\qwiklook.ini"), cmoForce
  907.             RemoveFile MakePath(DEST$, "att\qwikfix.ini"), cmoForce
  908.             RemoveFile MakePath(DEST$, "att\wnreadme.txt"), cmoForce
  909.             RemoveFile MakePath(DEST$, "att"), cmoForce
  910.         END IF
  911.         IF DoesDirExist(DEST$) THEN
  912.             RemoveDirRecurse DEST$
  913.         END IF
  914.   '  END IF
  915.     i% = DoMsgBox("The software has been succesfully deinstalled.  Run Setup again to reinstall.", "AT&T WorldNet Services", MB_OK)
  916. END SUB
  917.  
  918. '**
  919. '** Purpose:
  920. '**     Deinstalls the 1.2 product
  921. '** Arguments:
  922. '**     none.
  923. '** Returns:
  924. '**     none.
  925. '*************************************************************************
  926. SUB Deinstall12 STATIC
  927.     cb% = 256
  928.     szBuf$ = STRING$(cb%, 32)
  929.  
  930.     ' First handle CONFIG.SYS
  931.     IF IsFileWritable("c:\config.sys") = 0 THEN
  932.         i% = DoMsgBox("Setup is unable to modify CONFIG.SYS. File is read only.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  933.         END
  934.     END IF
  935.  
  936.     IF BatchFileLoad("c:\config.sys") THEN
  937.         IF BatchFindCmdReference(MakePath(DEST$, "NDIS\PROTMAN.DOS"), szBuf$, cb%, 1) THEN
  938.             ret% = BatchRemoveCmd
  939.         END IF
  940.  
  941.         IF BatchFindCmdReference("DIALNDIS.EXE", szBuf$, cb%, 1) THEN
  942.             ret% = BatchRemoveCmd
  943.         END IF
  944.  
  945.         IF BatchFindCmdReference("VTCPRMT.EXE", szBuf$, cb%, 1) THEN
  946.             ret% = BatchRemoveCmd
  947.         END IF
  948.  
  949.         IF BatchFileSave = 0 THEN
  950.             i% = DoMsgBox("Setup was unable to modify CONFIG.SYS.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  951.             END
  952.         END IF
  953.     END IF
  954.  
  955.     ' Next handle AUTOEXEC.BAT
  956.     IF IsFileWritable("c:\autoexec.bat") = 0 THEN
  957.         i% = DoMsgBox("Setup is unable to modify AUTOEXEC.BAT. File is read only.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  958.         END
  959.     END IF
  960.  
  961.     IF BatchFileLoad("c:\autoexec.bat") THEN
  962.         IF BatchFindVariable("SHIVA", szBuf$, cb%, 1) THEN
  963.             ret% = BatchRemoveVariable
  964.         END IF
  965.  
  966.         IF BatchFindCmdReference(MakePath(DEST$, "NDIS\NETBIND"), szBuf$, cb%, 1) THEN
  967.             ret% = BatchRemoveCmd
  968.         END IF
  969.     
  970.         IF BatchFileSave = 0 THEN
  971.             i% = DoMsgBox("Setup was unable to modify AUTOEXEC.BAT.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  972.             END
  973.         END IF
  974.     END IF
  975.  
  976.     ' Clean up WIN.INI entries except for the Navigator itself
  977.     RemoveIniKey "WIN.INI", "Netscape", "dialer", cmoNone
  978.     RemoveIniKey "WIN.INI", "Netscape", "eudora", cmoNone
  979.  
  980.     ' Next remove device drivers from SYSTEM.INI
  981.     szSysIni$ = MakePath(GetWindowsDir, "SYSTEM.INI")
  982.     IF IsFileWritable(szSysIni$) = 0 THEN
  983.         i% = DoMsgBox("Setup is unable to modify "+szSysIni$+". File is read only.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  984.         END
  985.     END IF
  986.  
  987.     RemoveProfileString szSysIni$, "386Enh", "device", "dial.386"
  988.     RemoveProfileString szSysIni$, "386Enh", "device", "pdwcomm.386"
  989.     RemoveProfileString szSysIni$, "386Enh", "device", "vntstimd.exe"
  990.     RemoveIniSection szSysIni$, "VNTSTIMD", cmoNone
  991.  
  992.     ' Now remove all files that we added to the Windows and the System directories
  993.     IF DoesFileExist(MakePath(GetWindowsDir, "DIALNDIS.EXE"), femExists) THEN
  994.         RemoveFile MakePath(GetWindowsDir, "DIALNDIS.EXE"), cmoNone
  995.     END IF
  996.  
  997.     IF DoesFileExist(MakePath(GetWindowsDir, "VTCPRMT.EXE"), femExists) THEN
  998.         RemoveFile MakePath(GetWindowsDir, "VTCPRMT.EXE"), cmoNone
  999.     END IF
  1000.  
  1001.     IF DoesFileExist(MakePath(GetWindowsSysDir, "VNTSTIMD.EXE"), femExists) THEN
  1002.         RemoveFile MakePath(GetWindowsSysDir, "VNTSTIMD.EXE"), cmoNone
  1003.     END IF
  1004.  
  1005.     IF DoesFileExist(MakePath(GetWindowsSysDir, "DIAL.386"), femExists) THEN
  1006.         RemoveFile MakePath(GetWindowsSysDir, "DIAL.386"), cmoNone
  1007.     END IF
  1008.  
  1009.     IF DoesFileExist(MakePath(GetWindowsDir, "NTS.INI"), femExists) THEN
  1010.         RemoveFile MakePath(GetWindowsDir, "NTS.INI"), cmoNone
  1011.     END IF
  1012.  
  1013.     ' Remove the WINSOCK.DLL from the Netscape directory
  1014.     IF DoesFileExist(MakePath(DEST$, "WINSOCK.DLL"), femExists) THEN
  1015.         RemoveFile MakePath(DEST$, "WINSOCK.DLL"), cmoNone
  1016.     END IF
  1017.  
  1018.     ' We need to reboot the machine when we're done
  1019.     bRebootMachine% = 1
  1020. END SUB
  1021.  
  1022. '**
  1023. '** Purpose:
  1024. '**     Builds the copy list and performs all installation operations.
  1025. '** Arguments:
  1026. '**     none.
  1027. '** Returns:
  1028. '**     none.
  1029. '*************************************************************************
  1030. SUB Install STATIC
  1031.     cb% = 256
  1032.     szBuf$ = STRING$(cb%, 32)
  1033.  
  1034.     szSrcDir$ = GetSymbolValue("STF_SRCDIR")
  1035.  
  1036.     ' Create user specified directory and CACHE sub-directory
  1037.     CreateDir DEST$, cmoNone
  1038.     CreateDir MakePath(DEST$, "CACHE"), cmoNone
  1039.  
  1040.     ' Add files to copy
  1041.     ClearCopyList
  1042.     AddOptFilesToCopyList APPFILES
  1043.     AddOptFilesToCopyList STACKFILES
  1044.     AddOptFilesToCopyList EUDORAFILES
  1045.     
  1046.     IF bISPMode THEN
  1047.         AddSectionFilesToCopyList "ISP", SRC$, DEST$
  1048.     END IF
  1049.  
  1050.     ' Add some billboards
  1051.     IF bISPMode THEN
  1052.         AddToBillboardList "mscuistf.dll", BILLBOARD1, "FModelessDlgProc", 1
  1053.         AddToBillboardList "mscuistf.dll", BILLBOARD2, "FModelessDlgProc", 1
  1054.     ELSE
  1055.         AddToBillboardList "mscuistf.dll", BILLBOARD1, "FModelessDlgProc", 1
  1056.         AddToBillboardList "mscuistf.dll", BILLBOARD2, "FModelessDlgProc", 1
  1057.         'AddToBillboardList "mscuistf.dll", BILLBOARD3, "FModelessDlgProc", 1
  1058.     END IF
  1059.  
  1060.     ' Do the actual copy
  1061.     SetCopyGaugePosition 85, 130
  1062.     CopyFilesInCopyList
  1063.  
  1064.     ' Merge OLE2 registration into system registry
  1065.     WinExec "REGEDIT /S OLE2.REG", SW_SHOW
  1066.     
  1067.     ' Modify launcher.ini to reflect the correct path names
  1068.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Netscape", "app1", DEST$+",netscape.exe", cmoOverwrite 
  1069.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Netscape", "ignore1", "winsock,"+MakePath(DEST$, "winsock.dll"), cmoOverwrite 
  1070.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "AttDial", "app1", MakePath(DEST$, "dialer")+",dialer.exe att.sr", cmoOverwrite 
  1071.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "AttDial", "ignore1", "winsock,"+MakePath(DEST$, "winsock.dll"), cmoOverwrite 
  1072.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Eudora", "app1", DEST$+",eudora.exe "+DEST$+"\eudora", cmoOverwrite 
  1073.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Eudora", "ignore1", "winsock,"+MakePath(DEST$, "winsock.dll"), cmoOverwrite 
  1074.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Signup", "app1", MakePath(Dest$, "dialer")+",signup.exe", cmoOverwrite 
  1075.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Signup", "ignore1", "winsock,"+MakePath(DEST$, "winsock.dll"), cmoOverwrite 
  1076.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Signup2", "app1", MakePath(Dest$, "dialer")+",signup.exe isp.sr", cmoOverwrite 
  1077.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Signup2", "ignore1", "winsock,"+MakePath(DEST$, "winsock.dll"), cmoOverwrite 
  1078.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Signup3", "app1", MakePath(Dest$, "dialer")+",signup.exe -r", cmoOverwrite 
  1079.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Signup3", "ignore1", "winsock,"+MakePath(DEST$, "winsock.dll"), cmoOverwrite 
  1080.     CreateIniKeyValue MakePath(DEST$, "att\advisor.ini"), "Advisor", "Dialer", MakePath(DEST$, "dialer\dialer.exe"), cmoOverwrite 
  1081.  
  1082.     ' Modify the win.ini file to have a [Netscape] section with a keyname-value
  1083.     ' pair for the Netscape INI file location and for the dialer
  1084.     CreateIniKeyValue "WIN.INI", "Netscape", "ini", MakePath(DEST$, "NETSCAPE.INI"), cmoOverwrite
  1085.  
  1086.     IF GetListItem(CHECKSTATES$, STACKFILES) = "ON" THEN
  1087.         CreateIniKeyValue "WIN.INI", "Netscape", "dialer", MakePath(DEST$, "DIALER"), cmoOverwrite
  1088.     END IF
  1089.  
  1090.     IF GetListItem(CHECKSTATES$, EUDORAFILES) = "ON" THEN
  1091.         CreateIniKeyValue "WIN.INI", "Netscape", "eudora", MakePath(DEST$, "EUDORA"), cmoOverwrite
  1092.     END IF
  1093.  
  1094.     szNetscapeIni$ = MakePath(DEST$, "NETSCAPE.INI")
  1095.  
  1096.     ' If the user specified an installation location other than the default
  1097.     ' location, then update the netscape.ini file accordingly
  1098.     IF DEST$ <> "C:\NETSCAPE" THEN
  1099.         UpdateNetscapeIni szNetscapeIni$
  1100.     END IF
  1101.  
  1102.     ' See if there is a news directory specified in the INI file
  1103.     szNewsDir$ = GetIniKeyString(szNetscapeIni$, "News", "News Directory")
  1104.     IF szNewsDir$ = "" THEN
  1105.         CreateNewsDir szNetscapeIni$, MakePath(DEST$, "NEWS")
  1106.     ELSEIF DoesDirExist(szNewsDir$) = 0 THEN
  1107.         CreateNewsDir szNetscapeIni$, szNewsDir$
  1108.     END IF
  1109.  
  1110.     ' Check to see if the NEWSRC file specified in the NETSCAPE.INI actually exists
  1111.     szNewsRC$ = GetIniKeyString(szNetscapeIni$, "Main", "News RC")
  1112.     IF szNewsRC$ <> "" THEN
  1113.         IF DoesFileExist(szNewsRC$, femExists) = 0 THEN
  1114.             ' Make the default NEWSRC file be in the NEWS sub-directory
  1115.             CreateIniKeyValue szNetscapeIni$, "Main", "News RC", MakePath(DEST$, "NEWS\NEWSRC"), cmoOverwrite
  1116.         END IF
  1117.     END IF
  1118.  
  1119.     ' Setup Netscape to use the audio player as an external viewer
  1120.     CreateIniKeyValue szNetscapeIni$, "Viewers", "audio/basic", MakePath(DEST$, "NAPLAYER.EXE"), cmoOverwrite
  1121.     CreateIniKeyValue szNetscapeIni$, "Viewers", "audio/x-aiff", MakePath(DEST$, "NAPLAYER.EXE"), cmoOverwrite
  1122.     CreateIniKeyValue szNetscapeIni$, "Suffixes", "audio/basic", "au,snd", cmoOverwrite
  1123.     CreateIniKeyValue szNetscapeIni$, "Suffixes", "audio/x-aiff", "aif,aiff,aifc", cmoOverwrite
  1124.  
  1125.     IF GetListItem(CHECKSTATES$, STACKFILES) = "ON" THEN
  1126.         ' Create NTS.INI file with WINSOCK section
  1127.         CreateIniKeyValue MakePath(GetWindowsDir, "NTS.INI"), "WINSOCK", "ETCDIR", MakePath(DEST$, "DIALER"), cmoOverwrite
  1128.  
  1129.         CreateIniKeyValue MakePath(GetWindowsDir, "NTS.INI"), "Installation", "PATH", MakePath(DEST$, "DIALER"), cmoOverwrite
  1130.  
  1131.         ' Backup the files we are going to change (only do this once)
  1132.         IF DoesFileExist(MakePath(DEST$, "system.ini"), femExists) = 0 THEN
  1133.             CopyFile MakePath(GetWindowsDir, "system.ini"), MakePath(DEST$, "system.ini"), cmoNone, 0
  1134.         END IF
  1135.  
  1136.         ' Update the system.ini file
  1137.         UpdateSystemIni
  1138.  
  1139.         ' Make sure the SHIVA environment variable isn't set. If it is then make sure it is correct
  1140.         IF BatchFileLoad("c:\autoexec.bat") THEN
  1141.             IF BatchFindVariable("SHIVA", szBuf$, cb%, 1) THEN
  1142.                 ret% = BatchReplaceVariable(MakePath(DEST$, "DIALER"))
  1143.                 IF BatchFileSave = 0 THEN
  1144.                     i% = DoMsgBox("Setup was unable to modify AUTOEXEC.BAT.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  1145.                     END
  1146.                 END IF
  1147.                 bRebootMachine% = 1
  1148.             ELSE
  1149.                 BatchFileQuit
  1150.             END IF
  1151.         END IF
  1152.  
  1153.         ' Add a registry association for the dialer
  1154.         UpdateRegistry
  1155.     END IF
  1156.  
  1157.     ' Add a program group and associated program items
  1158.     AddProgramItems
  1159.  
  1160.     IF GetListItem(CHECKSTATES$, STACKFILES) = "ON" THEN
  1161.         IF bReinstall% = 0 THEN
  1162.             ' Inform the user that we have modified their files
  1163.             szText$ = "Setup has modified your SYSTEM.INI file"
  1164.             szText$ = szText$ + ". A copy of the old file has been placed in directory " + DEST$
  1165.             i% = DoMsgBox(szText$, "AT&T WorldNet Services", MB_OK)
  1166.             szText$ = ""
  1167.         END IF
  1168.     END IF
  1169. END SUB
  1170.  
  1171. '**
  1172. '** Purpose:
  1173. '**     Adds the specified option files to the copy list.
  1174. '** Arguments:
  1175. '**     ftype%  - type of files to add, one of the following:
  1176. '**             APPFILES, STACKFILES, EUDORAFILES
  1177. '** Returns:
  1178. '**     none.
  1179. '*************************************************************************
  1180. SUB AddOptFilesToCopyList (ftype%) STATIC
  1181.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  1182.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1183.  
  1184.     IF ftype% = APPFILES THEN
  1185.         AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  1186.         AddSectionFilesToCopyList "OLE2", SrcDir$, GetWindowsSysDir
  1187.  
  1188.     ELSEIF ftype% = STACKFILES THEN
  1189.         AddSectionFilesToCopyList "DIALER", SrcDir$, DEST$
  1190.         AddSectionFilesToCopyList "CTL3D", SrcDir$, GetWindowsSysDir
  1191.         AddSectionFilesToCopyList "SYSTEM", SrcDir$, DEST$
  1192.  
  1193.     ELSEIF ftype% = EUDORAFILES THEN
  1194.         AddSectionFilesToCopyList "EUDORA", SrcDir$, DEST$
  1195.     END IF
  1196.     SrcDir$ = ""
  1197.     END IF
  1198. END SUB
  1199.  
  1200. '**
  1201. '** Purpose:
  1202. '**     Recalculates disk space for the given option files and sets
  1203. '**     the status info symbol "StatusItemsText".
  1204. '** Arguments:
  1205. '**     ftype% - type of files to add, one of the following:
  1206. '**             APPFILES, STACKFILES, EUDORAFILES
  1207. '** Returns:
  1208. '**     none.
  1209. '*************************************************************************
  1210. SUB RecalcOptFiles (ftype%) STATIC
  1211.     ClearCopyList
  1212.     AddOptFilesToCopyList ftype%
  1213.  
  1214.     fExtra% = 0
  1215.     IF ftype% = APPFILES THEN
  1216.         ListSym$ = APPNEEDS$
  1217.         ''Add extra cost to Windows drive for ini/progman, etc.
  1218.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1219.         ' ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  1220.         fExtra% = 1
  1221.     ELSEIF ftype% = STACKFILES THEN
  1222.         ListSym$ = STACKNEEDS$
  1223.     ELSEIF ftype% = EUDORAFILES THEN
  1224.         ListSym$ = EUDORANEEDS$
  1225.     END IF
  1226.  
  1227.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  1228.  
  1229.     cost& = 0
  1230.     FOR i% = 1 TO 26 STEP 1
  1231.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  1232.     NEXT i%
  1233.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  1234.  
  1235.     IF StillNeed& > 0 THEN
  1236.         ReplaceListItem BIGLIST$, ftype%, "YES"
  1237.     ELSE
  1238.         ReplaceListItem BIGLIST$, ftype%, ""
  1239.     END IF
  1240.  
  1241.     IF fExtra% THEN
  1242.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  1243.     END IF
  1244.     ListSym$ = ""
  1245. END SUB
  1246.  
  1247. '**
  1248. '** Purpose:
  1249. '**     Recalculates disk space and sets option status info according
  1250. '**     to the current destination path.
  1251. '** Arguments:
  1252. '**     none.
  1253. '** Returns:
  1254. '**     none.
  1255. '*************************************************************************
  1256. SUB RecalcPath STATIC
  1257.     CursorSave% = ShowWaitCursor()
  1258.  
  1259.     RecalcOptFiles APPFILES
  1260.     RecalcOptFiles STACKFILES
  1261.     RecalcOptFiles EUDORAFILES
  1262.  
  1263.     RestoreCursor CursorSave%
  1264. END SUB
  1265.  
  1266. '**
  1267. '** Purpose:
  1268. '**     Sets drive status info according to latest disk space calcs.
  1269. '** Arguments:
  1270. '**     none.
  1271. '** Returns:
  1272. '**     none.
  1273. '*************************************************************************
  1274. SUB SetDriveStatus STATIC
  1275.     drive$ = MID$(DEST$, 1, 1)
  1276.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  1277.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(STACKNEEDS$, ndrive%)) + VAL(GetListItem(EUDORANEEDS$, ndrive%))
  1278.     free& = GetFreeSpaceForDrive(drive$)
  1279.     ReplaceListItem DRIVETEXT$, 1, STR$(cost& / 1024) + " K"
  1280.     ReplaceListItem DRIVETEXT$, 2, STR$(free& / 1024) + " K"
  1281. END SUB
  1282.  
  1283. '**
  1284. '** Purpose:
  1285. '**     Appends a file name to the end of a directory path,
  1286. '**     inserting a backslash character as needed.
  1287. '** Arguments:
  1288. '**     szDir$  - full directory path (with optional ending "\")
  1289. '**     szFile$ - filename to append to directory
  1290. '** Returns:
  1291. '**     Resulting fully qualified path name.
  1292. '*************************************************************************
  1293. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1294.     IF szDir$ = "" THEN
  1295.         MakePath = szFile$
  1296.     ELSEIF szFile$ = "" THEN
  1297.         MakePath = szDir$
  1298.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1299.         MakePath = szDir$ + szFile$
  1300.     ELSE
  1301.         MakePath = szDir$ + "\" + szFile$
  1302.     END IF
  1303. END FUNCTION
  1304.